﻿// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.

namespace SixLabors.ImageSharp.PixelFormats
{
    /// <summary>
    /// Provides useful color definitions.
    /// </summary>
    public static class ColorConstants
    {
        /// <summary>
        /// Gets a collection of named, web safe, colors as defined in the CSS Color Module Level 4.
        /// </summary>
        public static readonly Rgba32[] WebSafeColors =
        {
            Rgba32.AliceBlue,
            Rgba32.AntiqueWhite,
            Rgba32.Aqua,
            Rgba32.Aquamarine,
            Rgba32.Azure,
            Rgba32.Beige,
            Rgba32.Bisque,
            Rgba32.Black,
            Rgba32.BlanchedAlmond,
            Rgba32.Blue,
            Rgba32.BlueViolet,
            Rgba32.Brown,
            Rgba32.BurlyWood,
            Rgba32.CadetBlue,
            Rgba32.Chartreuse,
            Rgba32.Chocolate,
            Rgba32.Coral,
            Rgba32.CornflowerBlue,
            Rgba32.Cornsilk,
            Rgba32.Crimson,
            Rgba32.Cyan,
            Rgba32.DarkBlue,
            Rgba32.DarkCyan,
            Rgba32.DarkGoldenrod,
            Rgba32.DarkGray,
            Rgba32.DarkGreen,
            Rgba32.DarkKhaki,
            Rgba32.DarkMagenta,
            Rgba32.DarkOliveGreen,
            Rgba32.DarkOrange,
            Rgba32.DarkOrchid,
            Rgba32.DarkRed,
            Rgba32.DarkSalmon,
            Rgba32.DarkSeaGreen,
            Rgba32.DarkSlateBlue,
            Rgba32.DarkSlateGray,
            Rgba32.DarkTurquoise,
            Rgba32.DarkViolet,
            Rgba32.DeepPink,
            Rgba32.DeepSkyBlue,
            Rgba32.DimGray,
            Rgba32.DodgerBlue,
            Rgba32.Firebrick,
            Rgba32.FloralWhite,
            Rgba32.ForestGreen,
            Rgba32.Fuchsia,
            Rgba32.Gainsboro,
            Rgba32.GhostWhite,
            Rgba32.Gold,
            Rgba32.Goldenrod,
            Rgba32.Gray,
            Rgba32.Green,
            Rgba32.GreenYellow,
            Rgba32.Honeydew,
            Rgba32.HotPink,
            Rgba32.IndianRed,
            Rgba32.Indigo,
            Rgba32.Ivory,
            Rgba32.Khaki,
            Rgba32.Lavender,
            Rgba32.LavenderBlush,
            Rgba32.LawnGreen,
            Rgba32.LemonChiffon,
            Rgba32.LightBlue,
            Rgba32.LightCoral,
            Rgba32.LightCyan,
            Rgba32.LightGoldenrodYellow,
            Rgba32.LightGray,
            Rgba32.LightGreen,
            Rgba32.LightPink,
            Rgba32.LightSalmon,
            Rgba32.LightSeaGreen,
            Rgba32.LightSkyBlue,
            Rgba32.LightSlateGray,
            Rgba32.LightSteelBlue,
            Rgba32.LightYellow,
            Rgba32.Lime,
            Rgba32.LimeGreen,
            Rgba32.Linen,
            Rgba32.Magenta,
            Rgba32.Maroon,
            Rgba32.MediumAquamarine,
            Rgba32.MediumBlue,
            Rgba32.MediumOrchid,
            Rgba32.MediumPurple,
            Rgba32.MediumSeaGreen,
            Rgba32.MediumSlateBlue,
            Rgba32.MediumSpringGreen,
            Rgba32.MediumTurquoise,
            Rgba32.MediumVioletRed,
            Rgba32.MidnightBlue,
            Rgba32.MintCream,
            Rgba32.MistyRose,
            Rgba32.Moccasin,
            Rgba32.NavajoWhite,
            Rgba32.Navy,
            Rgba32.OldLace,
            Rgba32.Olive,
            Rgba32.OliveDrab,
            Rgba32.Orange,
            Rgba32.OrangeRed,
            Rgba32.Orchid,
            Rgba32.PaleGoldenrod,
            Rgba32.PaleGreen,
            Rgba32.PaleTurquoise,
            Rgba32.PaleVioletRed,
            Rgba32.PapayaWhip,
            Rgba32.PeachPuff,
            Rgba32.Peru,
            Rgba32.Pink,
            Rgba32.Plum,
            Rgba32.PowderBlue,
            Rgba32.Purple,
            Rgba32.RebeccaPurple,
            Rgba32.Red,
            Rgba32.RosyBrown,
            Rgba32.RoyalBlue,
            Rgba32.SaddleBrown,
            Rgba32.Salmon,
            Rgba32.SandyBrown,
            Rgba32.SeaGreen,
            Rgba32.SeaShell,
            Rgba32.Sienna,
            Rgba32.Silver,
            Rgba32.SkyBlue,
            Rgba32.SlateBlue,
            Rgba32.SlateGray,
            Rgba32.Snow,
            Rgba32.SpringGreen,
            Rgba32.SteelBlue,
            Rgba32.Tan,
            Rgba32.Teal,
            Rgba32.Thistle,
            Rgba32.Tomato,
            Rgba32.Transparent,
            Rgba32.Turquoise,
            Rgba32.Violet,
            Rgba32.Wheat,
            Rgba32.White,
            Rgba32.WhiteSmoke,
            Rgba32.Yellow,
            Rgba32.YellowGreen
        };

        /// <summary>
        /// Gets a collection of colors as defined in the original second edition of Werner’s Nomenclature of Colours 1821.
        /// The hex codes were collected and defined by Nicholas Rougeux <see href="https://www.c82.net/werner"/>
        /// </summary>
        public static readonly Rgba32[] WernerColors =
        {
            Rgba32.FromHex("#f1e9cd"),
            Rgba32.FromHex("#f2e7cf"),
            Rgba32.FromHex("#ece6d0"),
            Rgba32.FromHex("#f2eacc"),
            Rgba32.FromHex("#f3e9ca"),
            Rgba32.FromHex("#f2ebcd"),
            Rgba32.FromHex("#e6e1c9"),
            Rgba32.FromHex("#e2ddc6"),
            Rgba32.FromHex("#cbc8b7"),
            Rgba32.FromHex("#bfbbb0"),
            Rgba32.FromHex("#bebeb3"),
            Rgba32.FromHex("#b7b5ac"),
            Rgba32.FromHex("#bab191"),
            Rgba32.FromHex("#9c9d9a"),
            Rgba32.FromHex("#8a8d84"),
            Rgba32.FromHex("#5b5c61"),
            Rgba32.FromHex("#555152"),
            Rgba32.FromHex("#413f44"),
            Rgba32.FromHex("#454445"),
            Rgba32.FromHex("#423937"),
            Rgba32.FromHex("#433635"),
            Rgba32.FromHex("#252024"),
            Rgba32.FromHex("#241f20"),
            Rgba32.FromHex("#281f3f"),
            Rgba32.FromHex("#1c1949"),
            Rgba32.FromHex("#4f638d"),
            Rgba32.FromHex("#383867"),
            Rgba32.FromHex("#5c6b8f"),
            Rgba32.FromHex("#657abb"),
            Rgba32.FromHex("#6f88af"),
            Rgba32.FromHex("#7994b5"),
            Rgba32.FromHex("#6fb5a8"),
            Rgba32.FromHex("#719ba2"),
            Rgba32.FromHex("#8aa1a6"),
            Rgba32.FromHex("#d0d5d3"),
            Rgba32.FromHex("#8590ae"),
            Rgba32.FromHex("#3a2f52"),
            Rgba32.FromHex("#39334a"),
            Rgba32.FromHex("#6c6d94"),
            Rgba32.FromHex("#584c77"),
            Rgba32.FromHex("#533552"),
            Rgba32.FromHex("#463759"),
            Rgba32.FromHex("#bfbac0"),
            Rgba32.FromHex("#77747f"),
            Rgba32.FromHex("#4a475c"),
            Rgba32.FromHex("#b8bfaf"),
            Rgba32.FromHex("#b2b599"),
            Rgba32.FromHex("#979c84"),
            Rgba32.FromHex("#5d6161"),
            Rgba32.FromHex("#61ac86"),
            Rgba32.FromHex("#a4b6a7"),
            Rgba32.FromHex("#adba98"),
            Rgba32.FromHex("#93b778"),
            Rgba32.FromHex("#7d8c55"),
            Rgba32.FromHex("#33431e"),
            Rgba32.FromHex("#7c8635"),
            Rgba32.FromHex("#8e9849"),
            Rgba32.FromHex("#c2c190"),
            Rgba32.FromHex("#67765b"),
            Rgba32.FromHex("#ab924b"),
            Rgba32.FromHex("#c8c76f"),
            Rgba32.FromHex("#ccc050"),
            Rgba32.FromHex("#ebdd99"),
            Rgba32.FromHex("#ab9649"),
            Rgba32.FromHex("#dbc364"),
            Rgba32.FromHex("#e6d058"),
            Rgba32.FromHex("#ead665"),
            Rgba32.FromHex("#d09b2c"),
            Rgba32.FromHex("#a36629"),
            Rgba32.FromHex("#a77d35"),
            Rgba32.FromHex("#f0d696"),
            Rgba32.FromHex("#d7c485"),
            Rgba32.FromHex("#f1d28c"),
            Rgba32.FromHex("#efcc83"),
            Rgba32.FromHex("#f3daa7"),
            Rgba32.FromHex("#dfa837"),
            Rgba32.FromHex("#ebbc71"),
            Rgba32.FromHex("#d17c3f"),
            Rgba32.FromHex("#92462f"),
            Rgba32.FromHex("#be7249"),
            Rgba32.FromHex("#bb603c"),
            Rgba32.FromHex("#c76b4a"),
            Rgba32.FromHex("#a75536"),
            Rgba32.FromHex("#b63e36"),
            Rgba32.FromHex("#b5493a"),
            Rgba32.FromHex("#cd6d57"),
            Rgba32.FromHex("#711518"),
            Rgba32.FromHex("#e9c49d"),
            Rgba32.FromHex("#eedac3"),
            Rgba32.FromHex("#eecfbf"),
            Rgba32.FromHex("#ce536b"),
            Rgba32.FromHex("#b74a70"),
            Rgba32.FromHex("#b7757c"),
            Rgba32.FromHex("#612741"),
            Rgba32.FromHex("#7a4848"),
            Rgba32.FromHex("#3f3033"),
            Rgba32.FromHex("#8d746f"),
            Rgba32.FromHex("#4d3635"),
            Rgba32.FromHex("#6e3b31"),
            Rgba32.FromHex("#864735"),
            Rgba32.FromHex("#553d3a"),
            Rgba32.FromHex("#613936"),
            Rgba32.FromHex("#7a4b3a"),
            Rgba32.FromHex("#946943"),
            Rgba32.FromHex("#c39e6d"),
            Rgba32.FromHex("#513e32"),
            Rgba32.FromHex("#8b7859"),
            Rgba32.FromHex("#9b856b"),
            Rgba32.FromHex("#766051"),
            Rgba32.FromHex("#453b32")
        };
    }
}